package cc.ok200.api.config;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/**
 * Web配置类
 * 配置全局JSON序列化，确保null值不会被序列化
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private ValueFilter nullValueFilter;

    /**
     * 配置FastJson作为HTTP消息转换器
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        
        // 配置FastJson特性
        FastJsonConfig config = new FastJsonConfig();
        // 只保留必要的特性，移除所有null值处理特性
        config.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect  // 禁用循环引用检测
                // 不使用任何将null转换为空值的特性，确保null值被完全忽略
        );
        
        // 应用null值过滤器
        config.setSerializeFilters(nullValueFilter);
        
        // 设置支持的媒体类型
        List<MediaType> mediaTypes = new ArrayList<>();
        mediaTypes.add(MediaType.APPLICATION_JSON);
        converter.setSupportedMediaTypes(mediaTypes);
        
        // 设置配置
        converter.setFastJsonConfig(config);
        
        // 添加到转换器列表
        converters.add(0, converter);
    }
} 